package com.kmxd.ams.client.system;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.kmxd.ams.client.system.dto.SysDictAddDTO;
import com.kmxd.ams.client.system.dto.SysDictEditDTO;
import com.kmxd.ams.client.system.dto.SysDictQueryDTO;
import com.kmxd.ams.client.system.vo.SysDictItemListVO;
import com.kmxd.ams.client.system.vo.SysDictItemVO;
import com.kmxd.ams.client.system.vo.SysDictListVO;
import com.kmxd.ams.client.system.vo.SysDictVO;
import com.kmxd.ams.core.common.bo.DictModel;
import com.kmxd.ams.core.common.enums.DictValueEnum;
import com.kmxd.ams.infra.system.entity.SysDict;
import java.util.List;

/**
 * 字典表 服务类
 *
 * @author admin
 * @since 2021-06-10
 */
public interface ISysDictSvc extends IService<SysDict> {

  /**
   * 分页查询字典列表
   *
   * @param reqPage
   * @param req
   * @return
   */
  Page<SysDictListVO> selectSysDictWithPage(Page reqPage, SysDictQueryDTO req);

  /**
   * 分页查询
   *
   * @param reqPage
   * @param req
   * @return
   */
  Page<SysDictListVO> selectPage(Page reqPage, SysDictQueryDTO req);

  /**
   * 查询列表
   *
   * @param req
   * @return
   */
  List<SysDictListVO> selectList(SysDictQueryDTO req);

  /**
   * 查询所有字典
   *
   * @return
   */
  List<SysDictListVO> selectListAll();

  /**
   * 新增
   *
   * @param req
   */
  void add(SysDictAddDTO req);

  /**
   * 修改
   *
   * @param req
   */
  void edit(SysDictEditDTO req);

  /**
   * 删除
   *
   * @param ids
   */
  void remove(String ids);

  /**
   * 查看
   *
   * @param id
   * @return
   */
  SysDictVO view(Long id);

  /**
   * 根据字典编码，查询字典项列表
   *
   * @param dictCode 字典code
   * @param setCode 系列code
   * @return
   */
  <T> List<DictModel<T>> listDictModel(
      String dictCode,
      String setCode,
      Integer year,
      DictValueEnum valueType,
      String ignoreValue,
      Long comId);

  /**
   * 查询多利列表信息
   *
   * @param dictCode
   * @param comId
   * @return
   */
  List<DictModel<String>> listDictSeries(String dictCode, Long comId);

  DictModel dictModel(Long dictItemId, DictValueEnum type);

  /**
   * 按字典code item code或者value查询字典项目
   *
   * @param dictCode
   * @param comId
   * @param dictItemSetCode
   * @return
   */
  List<SysDictItemListVO> selectItemList(Long comId, String dictCode, String dictItemSetCode);

  /**
   * 根据字典code获取字典信息
   *
   * @param dictCode
   * @return
   */
  List<SysDictItemListVO> getDictItemList(String dictCode);

  SysDictItemVO getDictItem(
      String dictCode,
      String dictItemCode,
      String dictItemName,
      String dictItemSetCode,
      Long comId);

  /** 清除所有缓存 */
  void clearAllCache();
}
